import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class No2 {
    public static void main(String[] args) {
        ListNode l18=new ListNode(9);
        ListNode l17=new ListNode(9,l18);
        ListNode l16=new ListNode(9,l17);
        ListNode l15=new ListNode(9,l16);
        ListNode l14=new ListNode(9,l15);
        ListNode l13=new ListNode(9,l14);
        ListNode l12=new ListNode(9,l13);
        ListNode l11=new ListNode(9,l12);

        ListNode l23=new ListNode(9);
        ListNode l22=new ListNode(9,l23);
        ListNode l21=new ListNode(9,l22);
        ListNode res=ListNode.addTwoNumbers(l11,l21);
        while (res!=null){
            System.out.println(res.val);
            res=res.next;
        }

    }

}
 class ListNode {


     public static   ListNode addTwoNumbers(ListNode l1, ListNode l2) {
         Integer[] l1List=result(l1);
         Integer[] l2List=result(l2);

         int max ;
         if(l1List.length>=l2List.length){
             max=l1List.length;
             l2List=Arrays.copyOf(l2List,max);
            for(int i=0;i<l2List.length;i++){
                if(l2List[i]==null){
                    l2List[i]=0;
                }
            }
         }else{
             max=l2List.length;
             l1List=Arrays.copyOf(l1List,max);
             for(int i=0;i<l1List.length;i++){
                 if(l1List[i]==null){
                     l1List[i]=0;
                 }
             }
         }
         int[] res=new int[max+1];
         for(int i=0;i<max;i++){
             res[i]=l1List[i]+l2List[i];
         }
         for (int i=0;i<max;i++){
             if(res[i]>=10){
                 res[i]=res[i]-10;
                 res[i+1]++;
             }
         }
         int[]fin;
         if(res[max]==0){
             fin=new int[max];
             for(int i=0;i<fin.length;i++){
                 fin[i]=res[i];
             }
         }else {
             fin=res;
         }

         ListNode ans=creatListNode(fin,new ListNode(),0);

         return ans;


     }
     public static ListNode creatListNode(int[] list, ListNode head, int num){
         if(num<list.length-1){
             head.val=list[num];
             head.next=new ListNode();
             creatListNode(list,head.next,num+1);
         }else if(num==list.length-1){
             head.val=list[num];
         }
         return head;



     }
     public static Integer[] result(ListNode listNode){
         List<Integer> nodeList=new ArrayList<>();
         while (listNode!=null){
             nodeList.add(listNode.val);
             listNode=listNode.next;
         }
         Integer[] res=new Integer[nodeList.size()];
         for(int i=0;i<res.length;i++){
             res[i]=nodeList.get(i);
         }
         return res;
     }





     int val;
     ListNode next;

     ListNode() {
     }

     ListNode(int val) {
         this.val = val;
     }

     ListNode(int val, ListNode next) {
         this.val = val;
         this.next = next;
     }
 }

